package com.buddy.learn.javasource._class;

/**
 * @author Buddy
 * @date 2021/5/17
 */
public class ClassLoaderDemo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        // 父子关系：AppClassLoader > ExtClassLoader > BootStrapClassLoader
        ClassLoader cl1 = ClassLoaderDemo1.class.getClassLoader();
        System.out.println("cl1 > " + cl1);
        System.out.println("parent of cl1 > " + cl1.getParent());
        // BootstrapClassLoader 由C++开发，是JVM虚拟机的一部分，本身不是Java类，打印为 null
        System.out.println("grand parent of cl1 > " + cl1.getParent().getParent());


        // String\Integer 等基础类由 BootstrapClassLoader 加载
        ClassLoader cl2 = String.class.getClassLoader();
        System.out.println("cl2 > " + cl2);
        System.out.println(cl1.loadClass("java.util.List").getClass().getClassLoader());
        // java 指令可以通过增加 -verbose:class -verbose:gc 参数，在启动时打印出类加载情况
        System.out.println("BootstrapClassLoader加载目录："+System.getProperty("sun.boot.class.path"));
        System.out.println("ExtClassLoader 加载目录"+System.getProperty("java.ext.dirs"));
        System.out.println("AppClassLoader 加载目录"+System.getProperty("java.class.path"));
    }
}
